الأمر ALTER
الأمر ALTER يستخدم عند الحاجة لإجراء تعديل على بنية الجدول مثل تغيير إسم الجدول, تغيير إسم العامود, تغيير نوع العامود, حذف العامود, إضافة عامود جديد, إضافة خصائص على العامود, و إزلة خصائص من العامود.
تنبيه: كن حذراً عند إجراء أي تعديل على الجدول لأنك لا تستطيع التراجع عن أي تعديل أجريته على جدول.
الشكل العام لإستخدامه
ALTER TABLE table_name operation;
مكان الكلمة
table_nameنضع إسم الجدول الذي نريد إجراء تعديلات عليه.مكان الكلمة
operationنحدد ما نريد تعديله, حذفه, أو إضافته.
تجهيز قاعدة البيانات التي سنطبق عليها
قم بتنفيذ الإستعلام التالي حتى تنشئ قاعدة بيانات جديدة إسمها harmash و تنشئ فيها جدول إسمه users يحتوي على بيانات 5 مستخدمين.
الإستعلام
-- سيتم حذفها harmash في حال كان يوجد بالأساس قاعدة بيانات إسمها
DROP DATABASE IF EXISTS harmash;
-- harmash هنا قمنا بإنشاء قاعدة بيانات جديدة إسمها
CREATE DATABASE harmash;
-- harmash هنا قمنا بتحديد أن أي إستعلام جديد سيتم تنفيذه على قاعدة البيانات
USE harmash;
-- يتألف من 4 أعمدة users هنا قمنا بإنشاء جدول جديد إسمه
-- لأننا قمنا بتحديدها قبل إستدعاء هذا الأمر harmash سيتم إنشاء هذا الجدول بداخل قاعدة البيانات
CREATE TABLE users (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(50),
last_name VARCHAR(50),
country VARCHAR(50)
);
-- هنا قمنا بإضافة 5 أسطر في الجدول, أي أضفنا معلومات 5 مستخدمين
-- لاحظ أننا لم نحدد أسماء الأعمدة التي سنضع فيها البيانات لأننا قمنا بملئ جميع المعلومات
-- في البداية هو حتى يكون عدد القيم الموضوعة يساوي عدد أعمدة الجدول null سبب وضع الكلمة
-- ستقوم قاعدة البيانات بوضع رقم تعرفة مختلف لكل سطر null مكان الكلمة
INSERT INTO users VALUES (null, "Rami", "Masri", "Lebanon");
INSERT INTO users VALUES (null, "Ahmad", "Naji", "Syria");
INSERT INTO users VALUES (null, "Hanan", "Mostafa", "KSA");
INSERT INTO users VALUES (null, "Abdullah", "Helmi", "Egypt");
INSERT INTO users VALUES (null, "Majed", "Alali", "Yaman");
بعد تنفيذ الإستعلام السابق في phpMyAdmin سيتم إنشاء قاعدة البيانات harmash و إنشاء الجدول users بداخلها.
قم بالنقر على إسم قاعدة البيانات harmash من القائمة اليسرى حتى تبدأ بالتعامل معها و تطبيق ما ستتعلمه في هذا الدرس.
البيانات التي قمنا بإضافتها بشكل إفتراضي في الجدول users.
| id | first_name | last_name | country |
|---|---|---|---|
| 1 | Rami | Masri | Lebanon |
| 2 | Ahmad | Naji | Syria |
| 3 | Hanan | Mostafa | KSA |
| 4 | Abdullah | Helmi | Egypt |
| 5 | Majed | Alali | Yaman |
طريقة حذف عامود من الجدول
لحذف عامود من الجدول, نكتب DROP COLUMN و من بعدها نحدد إسم العامود الذي نريد حذفه كالتالي.
ALTER TABLE table_name DROP COLUMN column_name;
مثال
الإستعلام التالي يقوم بحذف العامود country من الجدول users.
بعدها يعرض جميع البيانات الموجودة في الجدول.
الإستعلام
ALTER TABLE users -- users هنا قمنا بتحديد أننا نريد إجراء تعديل على بنية الجدول DROP COLUMN country; -- منه country هنا قمنا بتحديد أننا نريد حذف العامود SELECT * FROM users; -- لمعرفة التغيرات الجديدة users هنا قمنا بعرض جميع البيانات الموجودة في الجدول
سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
نلاحظ أن العامود country تم حذفه بشكل نهائي من الجدول.
| id | first_name | last_name |
|---|---|---|
| 1 | Rami | Masri |
| 2 | Ahmad | Naji |
| 3 | Hanan | Mostafa |
| 4 | Abdullah | Helmi |
| 5 | Majed | Alali |
طريقة إضافة عامود جديد في الجدول
لإضافة عامود جديد في الجدول, نكتب ADD و من بعدها نحدد إسم و نوع العامود الذي نريد إضافته كالتالي.
ALTER TABLE table_name ADD column_name datatype;
مثال
الإستعلام التالي يقوم بإضافة عامود إسمه salary و نوعه DOUBLE في الجدول users.
بعدها يعرض جميع البيانات الموجودة في الجدول.
الإستعلام
ALTER TABLE users -- users هنا قمنا بتحديد أننا نريد إجراء تعديل على بنية الجدول ADD salary DOUBLE; -- DOUBLE و نوعه salary هنا قمنا بتحديد أننا نريد إضافة عامود جديد إسمه SELECT * FROM users; -- لمعرفة التغيرات الجديدة users هنا قمنا بعرض جميع البيانات الموجودة في الجدول
سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
نلاحظ أنه تم إضافة عامود جديد إسمه salary في آخر الجدول و جميع حقوله فارغة.
| id | first_name | last_name | salary |
|---|---|---|---|
| 1 | Rami | Masri | NULL |
| 2 | Ahmad | Naji | NULL |
| 3 | Hanan | Mostafa | NULL |
| 4 | Abdullah | Helmi | NULL |
| 5 | Majed | Alali | NULL |
طريقة تغيير نوع القيم التي يمكن تخزينها في العامود
في البداية, عند تحويل نوع بيانات الجدول, عليك الإنتباه جيداً للأنواع التي تحول إليها لأنك قد تخسر القيم الموضوعة فيها أو قد تخسر جزء منها و إليك بعض الأمثلة.
إذا كان الجدول نوعه
VARCHARو قمت بتحويله للنوعINTسيتم تحويل كل القيم السابقة إلىNullلأنه بالمنطق لا يمكنك تحويل النص إلى رقم.إذا كان الجدول نوعه
DECIMALأوDOUBLEأوFLOATو قمت بتحويله للنوعINTستخسر أي رقم موضوع بعد الفاصلة فقط لأن النوعINTلا يقبل أي رقم بعد الفاصلة.
الآن, عليك معرفة أن الكلمة التي تضعها لتغيير نوع القيم التي يمكن تخزينها في العامود تختلف من قاعدة بيانات لأخرى و لكن شكل الإستعلام هو نفسه تماماً.
في قواعد بيانات MySQL
لتغيير نوع القيم التي يمكن تخزينها في العامود نكتب MODIFY COLUMN و من بعدها نحدد إسم و نوع العامود الذي نريد تعديل نوعه كالتالي.
ملاحظة: في المثال التالي, سنكتب الإستعلام باستخدام أسلوب قواعد بيانات MySQL لأنها القاعدة التي نتعامل معها منذ بداية الدورة.
ALTER TABLE table_name MODIFY COLUMN column_name datatype;
في قواعد بيانات Access و SQL Server
لتغيير نوع القيم التي يمكن تخزينها في العامود نكتب ALTER مرة ثانية و من بعدها نحدد إسم و نوع العامود الذي نريد تعديل نوعه كالتالي.
ALTER TABLE table_name ALTER column_name datatype;
في قواعد بيانات Oracle قبل الإصدار 10G
لتغيير نوع القيم التي يمكن تخزينها في العامود نكتب MODIFY COLUMN و من بعدها نحدد إسم و نوع العامود الذي نريد تعديل نوعه كالتالي.
ALTER TABLE table_name MODIFY COLUMN column_name datatype;
في قواعد بيانات Oracle الإصدار 10G و الإصدارات الأحدث
لتغيير نوع القيم التي يمكن تخزينها في العامود, نكتب MODIFY فقط و من بعدها نحدد إسم و نوع العامود الذي نريد تعديل نوعه كالتالي.
ALTER TABLE table_name MODIFY column_name datatype;
مثال
الإستعلام التالي يقوم بتغيير نوع القيم التي يمكن تخزينها في العامود salary إلى DECIMAL.
بعدها يعرض جميع البيانات الموجودة في الجدول.
الإستعلام
ALTER TABLE users -- users هنا قمنا بتحديد أننا نريد إجراء تعديل على بنية الجدول MODIFY COLUMN salary DECIMAL(7,2); -- DECIMAL إلى النوع salary هنا قمنا بتحديد أننا نريد تغيير نوع العامود SELECT * FROM users; -- لمعرفة التغيرات الجديدة users هنا قمنا بعرض جميع البيانات الموجودة في الجدول
سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
| id | first_name | last_name | salary |
|---|---|---|---|
| 1 | Rami | Masri | NULL |
| 2 | Ahmad | Naji | NULL |
| 3 | Hanan | Mostafa | NULL |
| 4 | Abdullah | Helmi | NULL |
| 5 | Majed | Alali | NULL |
طريقة تغيير إسم الجدول
لتغيير إسم الجدول, نكتب RENAME TO و من بعدها نضع الإسم الجديد الذي نريد إعطاؤه للجدول كالتالي.
ALTER TABLE table_name RENAME TO new_table_name;
مثال
الإستعلام التالي يقوم بتغيير إسم الجدول إلى employees.
الإستعلام
ALTER TABLE users -- users هنا قمنا بتحديد أننا نريد إجراء تعديل على بنية الجدول RENAME TO employees; -- employees هنا قمنا بتحديد أننا نريد تغيير إسم الجدول إلى
طريقة تغيير إسم العامود
طريقة تغيير إسم العامود تختلف بشكل كلي من قاعدة بيانات لأخرى, و الآن سنضع لك الطريقة الخاصة بقواعد بيانات MySQL لأننا نطبق الشرح باستخدامها.
لتغيير إسم الجدول نكتب CHANGE و من بعدها نحدد إسم العامود الذي نريد تغييره, ثم مسافة فارغة, ثم نضع الإسم الجديد للعامود, ثم نكتب نوع القيم التي يمكن تخزينها في العامود كالتالي.
ALTER TABLE tableName CHANGE old_column_name new_column_name datatype(length);
مثال
الإستعلام التالي يقوم بتغيير إسم العامود salary إلى income.
بعدها يعرض جميع البيانات الموجودة في الجدول.
الإستعلام
ALTER TABLE employees -- employees هنا قمنا بتحديد أننا نريد إجراء تعديل على بنية الجدول CHANGE salary income DECIMAL(7,2); -- income إلى salary هنا قمنا بتحديد أننا نريد تغيير إسم العامود SELECT * FROM users; -- لمعرفة التغيرات الجديدة employees هنا قمنا بعرض جميع البيانات الموجودة في الجدول
سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
| id | first_name | last_name | income |
|---|---|---|---|
| 1 | Rami | Masri | NULL |
| 2 | Ahmad | Naji | NULL |
| 3 | Hanan | Mostafa | NULL |
| 4 | Abdullah | Helmi | NULL |
| 5 | Majed | Alali | NULL |
مفهوم القيم الإفتراضية
عند إضافة سطر جديد في أي جدول, كنا نلاحظ أن الحقول التي لا نضيف فيها قيم يتم إظهار القيمة Null للإشارة إلى أنها فارغة.
إذاً, القيمة الإفتراضية لأي حقل هي القيمة Null.
في حال أردت وضع قيمة إفتراضية يتم إعطاءها للحقل الفارغ بدلاً من القيمة Null, يمكنك تحديد القيمة التي تريد وضعها بشكل إفتراضي عند تعريف العامود.
ملاحظة: عند وضع قيمة إفتراضية يجب مراعاة نوع القيم التي يمكن تخزينها في الجدول, فمثلاً إن كان نوع الجدول INT يجب أن تختار قيمة إفتراضية نوعها INT مثل الرقم 0 و ليس قيمة من نوع آخر مثل الكلمة 'Empty' لأنه بالمنطق لا يمكنك تخزين نص في حقل مخصص لتخزين رقم.
الشكل العام لإستخدامه
ALTER TABLE table_name (
column_name datatype DEFAULT default_value
);
مكان الكلمة
table_nameنضع إسم الجدول الذي نريد إجراء تعديلات عليه.مكان الكلمة
column_nameنحدد إسم العامود.مكان الكلمة
datatypeنحدد نوع البيانات التي يمكن تخيزنها في العامود.بعد الكلمة
DEFAULTنضع القيمة الإفتراضية التي نريد وضعها للحقول الموضوعة تحت هذا العامود.
تجهيز قاعدة البيانات التي سنطبق عليها
قم بتنفيذ الإستعلام التالي حتى تنشئ قاعدة بيانات جديدة إسمها harmash و تنشئ فيها جدول إسمه users.
العامود country وضعنا فيه الكلمة 'Unknown' كقيمة إفتراضية.
الإستعلام
-- سيتم حذفها harmash في حال كان يوجد بالأساس قاعدة بيانات إسمها
DROP DATABASE IF EXISTS harmash;
-- harmash هنا قمنا بإنشاء قاعدة بيانات جديدة إسمها
CREATE DATABASE harmash;
-- harmash هنا قمنا بتحديد أن أي إستعلام جديد سيتم تنفيذه على قاعدة البيانات
USE harmash;
-- يتألف من 4 أعمدة users هنا قمنا بإنشاء جدول جديد إسمه
-- لأننا قمنا بتحديدها قبل إستدعاء هذا الأمر harmash سيتم إنشاء هذا الجدول بداخل قاعدة البيانات
CREATE TABLE users (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(50),
last_name VARCHAR(50),
country VARCHAR(50) DEFAULT 'Unknown'
);
بعد تنفيذ الإستعلام السابق في phpMyAdmin سيتم إنشاء قاعدة البيانات harmash و إنشاء الجدول users بداخلها.
قم بالنقر على إسم قاعدة البيانات harmash من القائمة اليسرى حتى تبدأ بالتعامل معها و تطبيق ما ستتعلمه في هذا الدرس.
مثال يوضح متى يتم إضافة القيم الإفتراضية التي وضعناها للأعمدة
الإستعلام التالي يضيف 4 مستخدمين في الجدول users.
بعدها يعرض كل الأسطر التي تم إضافتها في الجدول.
الإستعلام
-- فقط first_name مع إدخال قيمة في الحقل users هنا قمنا بإضافة سطر في الجدول
INSERT INTO users (first_name) VALUES ("Mhamad");
-- last_name و قيمة في الحقل first_name مع إدخال قيمة في الحقل users هنا قمنا بإضافة سطر في الجدول
INSERT INTO users (first_name, last_name) VALUES ("Ayman", "Mostafa");
-- مع إدخال قيم لكل الحقول الموجودة في السطر users هنا قمنا بإضافة سطر في الجدول
INSERT INTO users (first_name, last_name, country) VALUES ("Ahmad", "Naji", "Syria");
-- مع إدخال قيم لكل الحقول الموجودة في السطر users هنا قمنا بإضافة سطر في الجدول
INSERT INTO users (first_name, last_name, country) VALUES ("Saly", "Harmush", null);
-- users هنا قمنا بعرض جميع البيانات الموجودة في الجدول
SELECT * FROM users;
سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
| id | first_name | last_name | country |
|---|---|---|---|
| 1 | Mhamad | NULL | Unknown |
| 2 | Ayman | Mostafa | Unknown |
| 3 | Ahmad | Naji | Syria |
| 4 | Saly | Harmush | NULL |
نلاحظ أن العامود country يظهر فيه عدة قيم من بينها القيمة NULL و القيمة الإفتراضية Unknown و سنضع قراءة تحليلة لكل سطر تم إدخاله حتى تعرف السبب.
السطر الأول
تم وضع القيمة NULL في الحقل last_name لأننا لم ندخل قيمة فيه.
تم وضع القيمة Unknown في الحقل country لأنها القيمة الإفتراضية التي حددنا أنه يتم وضعها في حال لم ندخل قيمة فيه.
السطر الثاني
تم وضع القيمة Unknown في الحقل country لأنها القيمة الإفتراضية التي حددنا أنه يتم وضعها في حال لم ندخل قيمة فيه.
السطر الثالث
لم يتم وضع القيمة الإفتراضية Unknown في الحقل country لأنه تم تمرير قيمة له.
السطر الرابع
لم يتم وضع القيمة الإفتراضية Unknown في الحقل country لأنه تم عمداً تمرير القيمة NULL في الإستعلام.
طريقة وضع قيمة إفتراضية لعامود معرف مسبقاً في الجدول
في حال أردت وضع قيمة إفتراضية لعامود موجود مسبقاً في الجدول, يمكنك تعديل العامود بواسطة الأمر ALTER.
طريقة وضع القيمة الإفتراضية لعامود تم تعريفه مسبقاً, تختلف من قاعدة بيانات لأخرى و لكن الفكرة هي نفسها تماماً.
في قواعد بيانات MySQL
ALTER TABLE table_name
MODIFY column_name datatype DEFAULT 'default_value';
في قواعد بيانات SQL Server
ALTER TABLE table_name
ADD CONSTRAINT df_column_name
DEFAULT 'default_value' FOR column_name;
في قواعد بيانات Oracle
ALTER TABLE table_name
MODIFY column_name DEFAULT 'default_value';
في قواعد بيانات Access
ALTER TABLE table_name
ALTER COLUMN column_name SET DEFAULT 'default_value';
مثال
في حال أردنا وضع الكلمة Missed كقيمة إفتراضية للحقل last_name في أي سطر جديد يتم إضافته, نكتب الإستعلام كالتالي في قواعد بيانات MySQL.
الإستعلام
ALTER TABLE users -- users هنا قمنا بتحديد أننا نريد إجراء تعديل على بنية الجدول
MODIFY last_name VARCHAR(50) DEFAULT 'Missed'; -- 'Missed' الإفتراضية إلى last_name هنا قمنا بتحديد أننا نريد تغيير قيم العامود
طريقة إلغاء القيمة إفتراضية التي وضعناها للعامود
في حال أردت عدم وضع قيمة إفتراضية للعامود, أي إلغاء وضع القيمة الإفتراضية التي وضعتها سابقاً للعامود. يمكنك تعديل العامود بواسطة الأمر ALTER.
طريقة غلغاء القيمة الإفتراضية للعامود, تختلف من قاعدة بيانات لأخرى و لكن الفكرة هي نفسها تماماً.
في قواعد بيانات MySQL
ALTER TABLE table_name
ALTER column_name DROP DEFAULT;
في قواعد بيانات SQL Server / Oracle / Access
ALTER TABLE table_name
ALTER COLUMN column_name DROP DEFAULT;
مثال
في حال أردنا عدم وضع قيمة إفتراضية لقيم العامود country, نكتب الإستعلام كالتالي في قواعد بيانات MySQL.
الإستعلام
ALTER TABLE users -- users هنا قمنا بتحديد أننا نريد إجراء تعديل على بنية الجدول
ALTER country DROP DEFAULT; -- country هنا قمنا بتحديد أننا نريد إزالة القيمة الإفتراضية الموضوعة على العامود